﻿//根据企业应用模式设置只读
function InitCorpModel()
{
	if (Form1.txtCorpModel.value=="0")
	{
		appForm.BldCjPrice.setReadOnly(true);
		appForm.TnCjPrice.setReadOnly(true);
		appForm.RoomTotal.setReadOnly(true);
		appForm.DiscntValue.setReadOnly(true,false);
	}
	else
	{
		appForm.BldCjPrice.setReadOnly(false);
		appForm.TnCjPrice.setReadOnly(false);
		appForm.RoomTotal.setReadOnly(false);
		appForm.DiscntValue.setReadOnly(false);
	}		
}

//主要用于处理radio按钮的事件

function BodyClick()
{
	if (event.srcElement.name=="appForm_CalMethod")
	{
		ChgCalMethod(event.srcElement.value);
	}
}


//打开选择折扣窗口
function ChooseDiscnt()
{
	//选择折扣窗口（必需传入缓存的折扣列表xml）
	var sPrice,sArea,sTotal;
	var oArgs = new Object();
	var oRtnValue = new Object();
	
	if (appForm.CalMode.value=="按建筑面积" || appForm.CalMode.value=="按套")
	{
		sPrice = appForm.Price.value.replace(/,/g,"");
		sArea = appForm.BldArea.value.replace(/,/g,"");
		sTotal = appForm.Total.value.replace(/,/g,"");
	}
	else
	{
		sPrice = appForm.TnPrice.value.replace(/,/g,"");
		sArea = appForm.TnArea.value.replace(/,/g,"");
		sTotal = appForm.Total.value.replace(/,/g,"");
	}

	//折扣列表xml
	oArgs.DiscntXml = Form1.txtDiscntListXml.value;
	
	//查看、关闭状态、审核三种情况下，折扣列表不能修改
	oArgs.mode = __mode.value;
	oArgs.auditingDate = "";
	oArgs.closeDate = "";

	oRtnValue = OpenModalWin2("折扣明细", "/slxt/XSXC/DiscountList.aspx", "projguid=" + appForm.ProjGUID.value + "&roomguid=" + appForm.RoomGUID.value + "&calmode=" + appForm.CalMode.value + "&calstd=" + Form1.txtCalStd.value + "&qsdate=" + appForm.QSDate.value + "&price=" + sPrice + "&area=" + sArea + "&total=" + sTotal, 850, 620, oArgs)

	if(typeof(oRtnValue)!="object" || oRtnValue == null || oRtnValue == undefined || oRtnValue.DiscntXml == "") {return};
	
	//重新缓存折扣列表
	Form1.txtDiscntListXml.value=oRtnValue.DiscntXml;
	
	// 计算折扣、单价、房间总价
	DiscntToPrice(oRtnValue.DiscntXml);
	
	// 重算协议总价、定金、贷款
	CalTotal();		
	// 折扣警戒线
	AlertDiscntLow();	

}


// 重新计算最终折扣值、成交单价、房间总价
function DiscntToPrice(sDataXml)
{
	var decBldArea = parseFloat(appForm.BldArea.value.replace(/,/g,""));
	var decTnArea = parseFloat(appForm.TnArea.value.replace(/,/g,""));
	
	// 按套计价时，使用总价基准计算折扣
	var sCalStd;
	if(Form1.txtCalStd.value == "1" || appForm.CalMode.value=="按套") 
	{
		sCalStd = "1";			
	}
	else
	{
		sCalStd = "2";			
	}

	if (appForm.CalMode.value=="按建筑面积" || appForm.CalMode.value=="按套")
	{
		var a=CalFinalDiscnt(appForm.ProjGUID.value,appForm.Price.value.replace(/,/g,""),appForm.BldArea.value.replace(/,/g,""),appForm.Total.value.replace(/,/g,""),sCalStd,sDataXml);
		if (a==null) return;
		
		//如果返回100折扣值并且总价也不变,则恢复原始价格
		if(Round(parseFloat(a[0]),2)==100 && a[3]==parseFloat(appForm.Total.value.replace(/,/g,""))) 
		{
			appForm.DiscntRemark.setValue(a[1]);
			CalPrice("DiscntValue",100);
			return;
		}
		
		appForm.BldCjPrice.setValue(Round(parseFloat(a[2]),GetPriceZero()));
		if(decTnArea!=0) appForm.TnCjPrice.setValue(Round(parseFloat(a[3]) / decTnArea,GetPriceZero()));
	}
	else
	{
		var a=CalFinalDiscnt(appForm.ProjGUID.value,appForm.TnPrice.value.replace(/,/g,""),appForm.TnArea.value.replace(/,/g,""),appForm.Total.value.replace(/,/g,""),sCalStd,sDataXml);
		if (a==null) return;
		if(Round(parseFloat(a[0]),2)==100 && a[3]==parseFloat(appForm.Total.value.replace(/,/g,""))) 
		{
			appForm.DiscntRemark.setValue(a[1]);
			CalPrice("DiscntValue",100);
			return;
		}
		appForm.TnCjPrice.setValue(Round(parseFloat(a[2]),GetPriceZero()));
		if(decBldArea!=0) appForm.BldCjPrice.setValue(Round(parseFloat(a[3]) / decBldArea,GetPriceZero()));
	}
	appForm.DiscntValue.setValue(Round(parseFloat(a[0]),2));
	appForm.DiscntRemark.setValue(a[1]);
	appForm.RoomTotal.setValue(Round(parseFloat(a[3]),GetTotalZero()));
	
}

		
// 计算最终折扣值。返回格式："OK|FinalDiscnt|DiscntRemark|BldPrice|TnPrice|RoomTotal"、"FAIL|错误信息"
function CalFinalDiscnt(sProjGUID,sPrice,sArea,sTotal,sCalStd,sDataXml)
{
	//xml通道计算最终折扣值。返回格式："OK|FinalDiscnt|DiscntRemark|Price|Total"、"FAIL|错误信息"
	var sFinalDiscnt = GetDataFromXMLHTTP("/SLXT/XSXC/XSXC_XMLHTTP.aspx","Order_ADD_CalDiscount","",sProjGUID + "|" + sPrice + "|" + sArea + "|" + sTotal + "|" + sCalStd,sDataXml);
	var a = sFinalDiscnt.split("|");
	if(a[0]=="OK")
	{
		// 校验是否折扣小于或等于零
		if(a[1]<0) 
		{
			alert("计算后成交总价小于或等于零，系统不允许成交总价小于或等于零！");
			return null;
		}
		sFinalDiscnt = sFinalDiscnt.substr(3,sFinalDiscnt.length-3);
		return sFinalDiscnt.split("|");
	}
	else if(a[0]=="FAIL")
	{
		alert(a[1]);
		return null;
	}
	else
	{
		alert("发生程序运行异常，请与管理员联系！");
		return null;
	}
	
}

// 修改折扣
function ChgDiscnt(sRtnValue,sNewValue)
{
	if(sNewValue=="" || parseFloat(sNewValue)<=0 || parseFloat(sNewValue)>100)
	{
		alert("最终折扣必须大于零并小于等于100！");
		event.returnValue=false;
		appForm.DiscntValue.setValue(sRtnValue);
		return;
	}
	else if(isNaN(parseFloat(sNewValue)))
	{
		alert("请输入有效的数字！");
		event.returnValue=false;
		appForm.DiscntValue.setValue(sRtnValue);
		return;
	}
	
	sNewValue = parseFloat(sNewValue.replace(/,/g,""));
	
	// 删除手工调整的折扣
	DelZkXml("手工调整","手工调整","");
	
	// 获取原来的折扣值
	var decBldArea = parseFloat(appForm.BldArea.value.replace(/,/g,""));
	var decTnArea = parseFloat(appForm.TnArea.value.replace(/,/g,""));

	// 按套计价时，使用总价基准计算折扣
	var sCalStd;
	if(Form1.txtCalStd.value == "1" || appForm.CalMode.value=="按套") 
	{
		sCalStd = "1";			
	}
	else
	{
		sCalStd = "2";			
	}

	if (appForm.CalMode.value=="按建筑面积" || (appForm.CalMode.value=="按套"))
	{
		var a=CalFinalDiscnt(appForm.ProjGUID.value,appForm.Price.value.replace(/,/g,""),appForm.BldArea.value.replace(/,/g,""),appForm.Total.value.replace(/,/g,""),sCalStd,Form1.txtDiscntListXml.value);
		if (a==null) return;
	}
	else
	{
		var a=CalFinalDiscnt(appForm.ProjGUID.value,appForm.TnPrice.value.replace(/,/g,""),appForm.TnArea.value.replace(/,/g,""),appForm.Total.value.replace(/,/g,""),sCalStd,Form1.txtDiscntListXml.value);
		if (a==null) return;
	}
	
	// 插入一条手工调整折扣（放在最后一行）
	decDiscntAmount=parseFloat(appForm.Total.value.replace(/,/g,"")) * (parseFloat(a[0])-sNewValue) / 100;			
	InsertZkXml("last","手工调整","手工调整","总价优惠","0.00",Round(decDiscntAmount,GetTotalZero()),"","","手工调整价格或者直接修改折扣值产生的折扣项");			
	

	// 修改折扣说明
	var dz = CalFktotal();
	appForm.DiscntRemark.setValue(dz[1]);	

	// 重算成交价格、房间总价
	CalPrice("DISCNTVALUE",sNewValue);
	
	// 重算协议总价、定金、贷款
	CalTotal();		
	// 折扣警戒线
	AlertDiscntLow();	
}

// 计算折扣警戒线（以人民币进行计算）
function AlertDiscntLow()
{
	if(parseFloat(Form1.txtDiscntLow.value.replace(/,/g,""))==0 && parseFloat(Form1.txtAmountLow.value.replace(/,/g,""))==0) 
	{
		document.all.myTips.innerText="";
		document.all.myTips.parentElement.parentElement.style.display = "none";			
	}
	else
	{
		var decDiscnt;
		var decValue;
		if(parseFloat(Form1.txtDiscntLow.value.replace(/,/g,""))!=0)
		{
			// 当前折扣下浮值
			decDiscnt = 100 - parseFloat(appForm.DiscntValue.value.replace(/,/g,""));
			if( decDiscnt > parseFloat(Form1.txtDiscntLow.value.replace(/,/g,"")))
			{
				decValue=parseFloat(appForm.Total.value.replace(/,/g,"")) * (decDiscnt - parseFloat(Form1.txtDiscntLow.value.replace(/,/g,"")) ) / 100;
				document.all.myTips.innerText="提示：折扣已低于警戒线 " + decValue.toLocaleString() + " 元(人民币)";
				document.all.myTips.parentElement.parentElement.style.display = "";
			}
			else 
			{
				document.all.myTips.innerText="";
				document.all.myTips.parentElement.parentElement.style.display = "none";			
			}
		}
	
		if(parseFloat(Form1.txtAmountLow.value.replace(/,/g,""))!=0)
		{
			// 当前总优惠金额
			decValue=parseFloat(appForm.Total.value.replace(/,/g,"")) - parseFloat(appForm.RoomTotal.value.replace(/,/g,""));
			if( decValue > parseFloat(Form1.txtAmountLow.value.replace(/,/g,"")))
			{
				document.all.myTips.innerText="提示：折扣已低于警戒线 " + (decValue - parseFloat(Form1.txtAmountLow.value.replace(/,/g,""))).toLocaleString() + " 元(人民币)";
				document.all.myTips.parentElement.parentElement.style.display = "";
			}
			else 
			{
				document.all.myTips.innerText="";
				document.all.myTips.parentElement.parentElement.style.display = "none";			
			}
		}
	}

}




// 修改价格（建筑成交单价、套内成交单价、房间总价）
// 参数:	sType	- DiscntValue、RoomTotal、TnCjPrice、BldCjPrice
function ChgPrice(sType,sRtnValue,sNewValue)
{
	sNewValue = parseFloat(sNewValue.replace(/,/g,""));

	if(isNaN(sNewValue))
	{
		alert("请输入有效的数字！");
		event.returnValue=false;
		eval("appForm." + sType + ".setValue(" + sRtnValue + ")");
		return;
	}

	if(sType=="DiscntValue")
	{
		if(sNewValue=="" || parseFloat(sNewValue)<=0 || parseFloat(sNewValue)>100)
		{			
			alert("折扣必须大于零并小于等于100！");
			event.returnValue=false;
			appForm.DiscntValue.setValue(sRtnValue);
			return;
		}
	}
	else
	{
		if(sNewValue=="" || parseFloat(sNewValue)<=0)
		{	switch(sType)
			{
				case "RoomTotal":
					alert("房间总价不能小于零或者等于零！");
					break;
				case "TnCjPrice":
					alert("套内成交单价不能小于零或者等于零！");
					break;
				case "BldCjPrice":
					alert("建筑成交单价不能小于零或者等于零！");
					break;
			}
			event.returnValue=false;
			eval("appForm." + sType + ".setValue(" + sRtnValue + ")");
			return;
		}
	}
	
	if(sNewValue>100000000)
	{
		alert("数值超界！");
		event.returnValue=false;
		eval("appForm." + sType + ".setValue(" + sRtnValue + ")");
		return;
	}

	// 重算成交价格、房间总价
	CalPrice(sType,sNewValue);
	
	// 删除手工调整的折扣
	DelZkXml("手工调整","手工调整","");
	
	// 获取原来的折扣值
	var decBldArea = parseFloat(appForm.BldArea.value.replace(/,/g,""));
	var decTnArea = parseFloat(appForm.TnArea.value.replace(/,/g,""));

	var sCalStd;
	if(Form1.txtCalStd.value == "1" || appForm.CalMode.value=="按套") 
	{
		sCalStd = "1";			
	}
	else
	{
		sCalStd = "2";			
	}

	if (appForm.CalMode.value=="按建筑面积" || appForm.CalMode.value=="按套")
	{
		var a=CalFinalDiscnt(appForm.ProjGUID.value,appForm.Price.value.replace(/,/g,""),appForm.BldArea.value.replace(/,/g,""),appForm.Total.value.replace(/,/g,""),sCalStd,Form1.txtDiscntListXml.value);
		if (a==null) return;
	}
	else
	{
		var a=CalFinalDiscnt(appForm.ProjGUID.value,appForm.TnPrice.value.replace(/,/g,""),appForm.TnArea.value.replace(/,/g,""),appForm.Total.value.replace(/,/g,""),sCalStd,Form1.txtDiscntListXml.value);
		if (a==null) return;
	}
	
	// 插入一条手工调整折扣（放在最后一行）
	decDiscntAmount=parseFloat(a[3]) - parseFloat(appForm.RoomTotal.value.replace(/,/g,""));			
	InsertZkXml("last","手工调整","手工调整","总价优惠","0.00",Round(decDiscntAmount,GetTotalZero()),"","","手工调整价格或者直接修改折扣值产生的折扣项");			
	
	// 修改折扣说明
	var dz = CalFktotal();
	appForm.DiscntRemark.setValue(dz[1]);
	
	// 用于自动化测试
	Form1.txtTestHandYh.value=decDiscntAmount.toString();
	
	// 重算协议总价、定金、贷款
	CalTotal();			
	
	// 折扣警戒线
	AlertDiscntLow();	
}

// 修改计价模式
function ChgCalMode(sValue)
{
	if(appForm.CalMode.value!=sValue)
	{
		// 强制设置值,避免在onclick完成前无法通过.value获取新值(sValue)
		appForm.CalMode.setValue(sValue);
		
		// “按套”时的特殊处理
		if(sValue=="按套")
		{
			// 删除“单价优惠”的折扣
			var arrDiscntValue = DelZkXml("","","单价优惠");
			if(arrDiscntValue.length>0)
			alert("计价方式为“按套”计算时，不允许选择“单价优惠”的折扣，系统将自动删除该折扣。");
		}
		// 重算装修款
		ChgZxPrice(appForm.ZxPrice.value,appForm.ZxPrice.value);
		
		// 重算折扣、单价、房间总价
		var sDataXml = Form1.txtDiscntListXml.value;
		DiscntToPrice(sDataXml);
		
		// 重算协议总价、定金、贷款
		CalTotal();		
		// 折扣警戒线
		AlertDiscntLow();	

		event.returnValue = true;
	}
}


// 修改装修标准
function ChgZxBz(a_ZxBzGUID,a_ZxBz)
{
	if(a_ZxBzGUID=="")
	{
		appForm.ZxBz.value=a_ZxBz;
		appForm.ZxPrice.setValue("0.00");
		appForm.ZxTotal.setValue("0.00");
	}
	else
	{		
			var strZxBzZl = GetDataFromXMLHTTP("/SLXT/XSXC/XSXC_XMLHTTP.aspx","Order_ADD_ZxBz",a_ZxBzGUID,"");
			if(strZxBzZl=="" || strZxBzZl.length>100)
			{
				alert("选择装修标准失败，请管理员联系！");	
			}
			else
			{
				appForm.ZxBz.value=a_ZxBz;
				// 装修单价
				ChgZxPrice(appForm.ZxPrice.value,strZxBzZl);
			}
	}
	// 重算协议总价和贷款
	CalTotal();			
}

// 修改装修单价
function ChgZxPrice(a_OldPrice,a_ZxPrice)
{
    event.returnValue=false;
	if(a_ZxPrice=="" || parseFloat(a_ZxPrice.replace(/,/g,""))==0)
	{
		appForm.ZxPrice.setValue("0.00");
		appForm.ZxTotal.setValue("0.00");
	}
	else if (parseFloat(a_ZxPrice.replace(/,/g,""))<0)
	{
		alert("装修单价不能小于零");
		appForm.ZxPrice.setValue(a_OldPrice);
		return;
	}
	else if(isNaN(parseFloat(a_ZxPrice.replace(/,/g,""))))
	{
		alert("请输入有效的数字！");
		appForm.ZxPrice.setValue(a_OldPrice);
		return;
	}
	else if(parseFloat(a_ZxPrice.replace(/,/g,""))>100000000)
	{
		alert("数值超界！");
		appForm.ZxPrice.setValue(a_OldPrice);
		return;
	}
	else
	{
		a_ZxPrice=Round(parseFloat(a_ZxPrice.replace(/,/g,"")),GetPriceZero());

		// 计算装修总价
		var decBldArea=parseFloat(appForm.BldArea.value.replace(/,/g,""));		//建筑面积
		var decTnArea=parseFloat(appForm.TnArea.value.replace(/,/g,""));		//套内面积						
		var strCalMode=appForm.CalMode.value;
		var strDjArea=Form1.txtDjArea.value;
		if(strCalMode=="按建筑面积" || strCalMode=="按套")
		{
			appForm.ZxTotal.setValue(Round(a_ZxPrice * decBldArea,GetTotalZero()));
		}
		else
		{
			appForm.ZxTotal.setValue(Round(a_ZxPrice * decTnArea,GetTotalZero()));
		}
		appForm.ZxPrice.setValue(a_ZxPrice);
	}
	// 重算协议总价和贷款
	CalTotal();			
}


// 修改装修总价
function ChgZxTotal(a_OldTotal,a_ZxTotal)
{	
    event.returnValue=false;
	if(a_ZxTotal=="" || parseFloat(a_ZxTotal.replace(/,/g,""))==0)
	{
		appForm.ZxPrice.setValue("0.00");
		appForm.ZxTotal.setValue("0.00");
	}
	else if (parseFloat(a_ZxTotal.replace(/,/g,""))<0)
	{
		alert("装修总价价不能小于零");
		appForm.ZxTotal.setValue(a_OldTotal);
		return;
	}
	else if(isNaN(parseFloat(a_ZxTotal.replace(/,/g,""))))
	{
		alert("请输入有效的数字！");
		appForm.ZxTotal.setValue(a_OldTotal);
		return;
	}
	else if(parseFloat(a_ZxTotal.replace(/,/g,""))>100000000)
	{
		alert("数值超界！");
		appForm.ZxTotal.setValue(a_OldTotal);
		return;
	}
	else
	{
		a_ZxTotal=Round(parseFloat(a_ZxTotal.replace(/,/g,"")),GetTotalZero());
		
		// 反算装修单价
		var decBldArea=parseFloat(appForm.BldArea.value.replace(/,/g,""));		//建筑面积
		var decTnArea=parseFloat(appForm.TnArea.value.replace(/,/g,""));		//套内面积						
		var strCalMode=appForm.CalMode.value;
		var strDjArea=Form1.txtDjArea.value;
		if(strCalMode=="按建筑面积" || (strCalMode=="按套" && strDjArea=="建筑面积"))
		{
			appForm.ZxPrice.setValue(Round(a_ZxTotal / decBldArea,GetPriceZero()));
		}
		else
		{
			appForm.ZxPrice.setValue(Round(a_ZxTotal / decTnArea,GetPriceZero()));
		}
		appForm.ZxTotal.setValue(a_ZxTotal);
	}
	// 重算协议总价和贷款
	CalTotal();			
}


function ChgIsZxkbrht(sValue)
{
	if(appForm.IsZxkbrht.value!=sValue)
	{
		// 强制设置值,避免在onclick完成前无法通过.value获取新值(sValue)
		appForm.IsZxkbrht.setValue(sValue);
		// 重算协议总价、定金、贷款
		CalTotal();		
		// 折扣警戒线
		AlertDiscntLow();	
	}
}

// 修改汇率
function ChgExRate(sOldValue,sNewValue)
{

	if(sNewValue=="" || parseFloat(sNewValue.replace(/,/g,""))<=0)
	{
		alert("协议汇率不能小于或等于零");
		event.returnValue=false;
		appForm.ExRate.setValue(sOldValue);
		return;
	}
	else if(isNaN(parseFloat(sNewValue.replace(/,/g,""))))
	{
		alert("请输入有效的数字！");
		event.returnValue=false;
		appForm.ExRate.setValue(sOldValue);
		return;
	}
	else if(parseFloat(sNewValue.replace(/,/g,""))>100000000)
	{
		alert("数值超界！");
		event.returnValue=false;
		appForm.ExRate.setValue(sOldValue);
		return;
	}

	// 四舍五入后才重算总价
	event.returnValue=false;
	appForm.ExRate.setValue(Round(parseFloat(sNewValue.replace(/,/g,"")),4));
	
	// 重算协议总价和贷款
	CalTotal();
}

// 修改币种
function ChgBz(sOldValue,sNewValue)
{
	if(sNewValue=="人民币")
	{
		appForm.ExRate.setValue(1.0000);
	}
	else
	{
		var strExRate = GetDataFromXMLHTTP("/SLXT/XSXC/XSXC_XMLHTTP.aspx","Order_ADD_BzHl",sNewValue,appForm.QSDate.value);
		if(strExRate=="" || strExRate.length>100)
		{
			alert("选择协议币种失败，请管理员联系！");	
			appForm.bz.setValue("人民币");
			appForm.ExRate.setValue("1.0000");
		}
		else if (strExRate=="NONE")
		{
			alert(sNewValue + "汇率尚未设置，请联系财务部门！");
			appForm.bz.setValue("人民币");
			appForm.ExRate.setValue("1.0000");
		}
		else
		{
			appForm.ExRate.setValue(Round(parseFloat(strExRate),4));
		}
	}
	// 重算协议总价和贷款
	CalTotal();
}

// 修改定金
function ChgEarnest(sOldValue,sNewValue)
{
    event.returnValue=false;
	if(sNewValue=="" || parseFloat(sNewValue.replace(/,/g,""))==0)
	{
		appForm.Earnest.setValue("0.00");
		return;
	}
	else if (parseFloat(sNewValue.replace(/,/g,""))<0)
	{
		alert("定金不能小于零");
		appForm.Earnest.setValue(sOldValue);
		return;
	}
	else if(isNaN(parseFloat(sNewValue.replace(/,/g,""))))
	{
		alert("请输入有效的数字！");
		appForm.Earnest.setValue(sOldValue);
		return;
	}
	else if(parseFloat(sNewValue.replace(/,/g,""))>100000000)
	{
		alert("数值超界！");
		appForm.Earnest.setValue(sOldValue);
		return;
	}
	
	appForm.Earnest.setValue(Round(parseFloat(sNewValue.replace(/,/g,"")),GetTotalZero()));
	
}

// 修改贷款 ChgDk('GjjTotal',this.value)
//function ChgDk(sFlag,sNewValue)
//{
//	sNewValue = parseFloat(sNewValue.replace(/,/g,""));
//	if(isNaN(sNewValue)) return;
//	switch(sFlag)
//	{
//		case "AjTotal":
//			appForm.AjTotal.setValue(Truncate(sNewValue,Form1.txtAjZero.value).toLocaleString());
//			break;
//		case "GjjTotal":
//			appForm.GjjTotal.setValue(Truncate(sNewValue,Form1.txtGjjZero.value).toLocaleString());
//			break;
//	}
//}

// 修改签署、失效日期
function ChgDate(sType,sValue)
{
	var strBgnDate=appForm.QSDate.value;
	var strEndDate=appForm.EndDate.value;
	
	var dtBgn = StringToDate(strBgnDate);
	var dtEnd = StringToDate(strEndDate);
	var decEndDays=parseInt(Form1.txtEndDays.value);
	if(sType=="QSDate")				
	{
		// 新增定单时，业务处理日期等于qsdate 
		if(__mode.value=="1")
		{
			appForm.YwblDate.setValue(strBgnDate);
		}
		
		if(decEndDays==0 && strEndDate!="" && dtEnd<=dtBgn)
		{
			alert("失效日期不能小于或等于签署日期！");
		}
		else if(decEndDays!=0)
		{
			dtEnd=new Date(dtBgn.getFullYear(),dtBgn.getMonth(),dtBgn.getDate()+decEndDays);
			appForm.EndDate.setValue(DateToString(dtEnd));
		}
	}
	else if(sType=="EndDate")		
	{
			if(strBgnDate!="" && dtEnd<=dtBgn)
			alert("失效日期不能小于或等于签署日期！");
	}
}

// 修改付款方式：不生成付款详情。但获取折扣、标准定金、定金、按揭贷款、公积金贷款，然后填充到页面。
// 需要修改折扣、折扣说明 (如果a_PayFormGUID为空，则也要在后台去除对应的折扣项，重算折扣值)
function ChgPayform(a_PayformName)
{
	// 删除付款方式类型的折扣
	DelZkXml("","付款方式","");

	// 删除手工调整类型的折扣
	DelZkXml("","手工调整","");

	if(a_PayformName=="")
	{
			// 清空字段值和缓存值
			appForm.Earnest.setValue(Round(parseFloat(Form1.txtEarnestStd.value),GetTotalZero()));
					
			Form1.txtEarnestRate.value="";
			//Form1.txtEarnestStd.value="";
	}
	else
	{
			var strReturn;
			// 返回格式：	折扣值|按揭精确度|公积金精确度|按揭银行|公积金银行|标准定金|定金比例|定金金额|定金是否扣除定金|按揭比例|按揭金额|按揭是否扣除定金|按揭分期|按揭期间间隔|公积金比例|公积金金额|公积金是否扣除定金|公积金分期|公积金期间间隔
			//				0			1			2			3		4			5		6		7			8				9		10			11				12		13			14			15			16				17				18	
			strReturn = GetDataFromXMLHTTP("/SLXT/XSXC/XSXC_XMLHTTP.aspx","Order_ADD_ChgPayForm","",a_PayformName + "|" + appForm.OrderType.value + "|" + appForm.ProjGUID.value);
			//alert(strReturn);
			var arrTemp=strReturn.split("|");
			if(strReturn.length>100)
			{
				alert("发生运行时异常，请管理员联系！");	
			}
			else if(arrTemp[0]=="FAIL")
			{
				alert(arrTemp[1]);	
			}
			else
			{
				// 定金：如果付款方式中没有定义定金，则取系统定义的标准定金。（比例方式放在计算协议总价后重算）
				if(arrTemp[6]=="" && arrTemp[7]=="" && arrTemp[8]=="") {appForm.Earnest.setValue(Round(parseFloat(arrTemp[5]),GetTotalZero()));}
				else 
				{
					if(parseFloat(arrTemp[6])=="0")	{appForm.Earnest.setValue(Round(parseFloat(arrTemp[7]),GetTotalZero()));}
					
				}
				
			
				
				// 插入一条付款方式类型折扣，放在第一行
				InsertZkXml("first",appForm.PayformName.value,"付款方式","打折",arrTemp[0],"0.00","","","付款方式定义的折扣");
			}
	}

	// 重新计算最终折扣值、成交单价、房间总价
	DiscntToPrice(Form1.txtDiscntListXml.value)
	
	// 重算协议总价、定金、贷款
	CalTotal();			
	// 折扣警戒线
	AlertDiscntLow();	
	
	Form1.txtIsFeeCreated.value="FALSE";	

}


//*************** 4、折扣xml的函数 ********************//

// 在xml缓存中插入一条折扣 （用于修改折扣、修改价格、修改付款方式后插入一条折扣）
// 如果已经有一个此名称、此类型的折扣，请先用DelZkXml()函数将它删除
// 参数：	a_strPos	- 插入的节点位置（first、last）
function InsertZkXml(a_strPos,a_strDiscntName,a_strDiscntType,a_strCalMethod,a_strDiscntValue,a_strPreferentialPrice,a_strBgnDate,a_strEndDate,a_strRemark)
{
    var xmlDom = new ActiveXObject("Microsoft.XMLDOM")
    try {
        xmlDom.loadXML(Form1.txtDiscntListXml.value);
    }
    catch (e) {
        alert("缓存的折扣列表xml格式错误，请与管理员联系！");
        return;
    }
    if (a_strPos == "last" && a_strDiscntType == '手工调整') {
        a_strSequence = "998";
    }
    else if (a_strPos == "first" && a_strDiscntType == '付款方式') {
        a_strSequence = "1";
    }
    else {
        a_strSequence = "699"
    }
    // 创建新节点
    var rowNode = xmlDom.createElement("row");
    strGUID = GetDataFromXMLHTTP("/Slxt/PUB/GetDataFromXMLHTTP.aspx", "CREATEGUID", "", "");
    rowNode.setAttribute("oid", strGUID);
    rowNode.setAttribute("entity", "0");
    rowNode.setAttribute("DiscntGUID", "");
    rowNode.setAttribute("BgnDate", "");
    rowNode.setAttribute("EndDate", "");
    rowNode.setAttribute("IsAllowChange", "0");
    rowNode.setAttribute("DiscntScope", "");
    rowNode.setAttribute("Tpzk", "0");
    rowNode.setAttribute("Sequence", a_strSequence);

    // 插入新节点
    var arrNodes = xmlDom.selectNodes("/dataxml/row");
    if (arrNodes.length == 0 || a_strPos.toLowerCase() == "last") {
        xmlDom.documentElement.appendChild(rowNode);
    }
    else {
        xmlDom.documentElement.insertBefore(rowNode, xmlDom.documentElement.firstChild);
    }


    // 插入新节点的所有子节点
    var itemNode1 = xmlDom.createElement("DiscntName");
    itemNode1.setAttribute("type", "");
    itemNode1.text = a_strDiscntName;
    rowNode.appendChild(itemNode1);
    //		
    var itemNode2 = xmlDom.createElement("DiscntType");
    itemNode2.setAttribute("type", "");
    itemNode2.text = a_strDiscntType;
    rowNode.appendChild(itemNode2);

    var itemNode3 = xmlDom.createElement("CalMethod");
    itemNode3.setAttribute("type", "");
    itemNode3.text = a_strCalMethod;
    rowNode.appendChild(itemNode3);

    var itemNode4 = xmlDom.createElement("DiscntValue");
    itemNode4.setAttribute("type", "money");
    itemNode4.text = a_strDiscntValue;
    rowNode.appendChild(itemNode4);

    var itemNode5 = xmlDom.createElement("PreferentialPrice");
    itemNode5.setAttribute("type", "");
    itemNode5.text = a_strPreferentialPrice;
    rowNode.appendChild(itemNode5);

    var itemNode6 = xmlDom.createElement("Remark");
    itemNode6.setAttribute("type", "");
    itemNode6.text = a_strRemark;
    rowNode.appendChild(itemNode6);

    Form1.txtDiscntListXml.value = xmlDom.xml;
		
		// 修改折扣说明
		//if(a_strDiscntType=="手工调整")	
		//{
		//	if(appForm.DiscntRemark.value=="") {appForm.DiscntRemark.setValue(a_strDiscntType + " " +  a_strPreferentialPrice);}
		//	else {appForm.DiscntRemark.setValue(appForm.DiscntRemark.value + " - " + a_strDiscntType + " " +  a_strPreferentialPrice);}
		//}
}



// 在xml缓存中删除一条折扣 （用于修改折扣、修改价格、修改付款方式时插入新折扣前清除重复项）
// 如果a_strDiscntName为空""，则删除该类型的折扣
// 返回被删除折扣项的折扣值的数字类型数组
function DelZkXml(a_strDiscntName,a_strDiscntType,a_CalMethod)
{
		var xmlDom = new ActiveXObject("Microsoft.XMLDOM")
		try
		{
			xmlDom.loadXML(Form1.txtDiscntListXml.value);
		}
		catch(e)
		{
			alert("缓存的折扣列表xml格式错误，请与管理员联系！");
			return;
		}
		
		var flag1,flag2,flag3;
		var strDiscntName,strDiscntType,decDiscntValue;
		var arrDiscntValue = new Array();
		var m=0;
		var xmlNodes = xmlDom.documentElement.selectNodes("/dataxml/row")
		for ( var i = 0; i < xmlNodes.length; i++)
		{
			strDiscntName = xmlNodes[i].selectSingleNode("DiscntName").text;
			strDiscntType = xmlNodes[i].selectSingleNode("DiscntType").text;
			strCalMode = xmlNodes[i].selectSingleNode("CalMethod").text;
			decDiscntValue = parseFloat(xmlNodes[i].selectSingleNode("DiscntValue").text.replace(/,/g,""));
			
			flag1=true;flag2=true;flag3=true;
			if(a_strDiscntName!="" && strDiscntName!=a_strDiscntName) flag1=false;
			if(a_strDiscntType!="" && strDiscntType!=a_strDiscntType) flag2=false;
			if(a_CalMethod!="" && strCalMode!=a_CalMethod) flag3=false;
			
			if(flag1 && flag2 && flag3)
			{
				// 删除折扣
				xmlDom.documentElement.removeChild(xmlNodes[i]);	 
				arrDiscntValue[m]=decDiscntValue;
				m++;
				
				// 修改折扣说明
				//var s=appForm.DiscntRemark.value;
				//var pos = s.indexOf(strDiscntName);
				//if (pos!=-1)
				//{
				//	s=s.substr(0,s.lastIndexOf("+",pos)-1);
				//	appForm.DiscntRemark.setValue(s);
				//}
				
			}
		}
		
		Form1.txtDiscntListXml.value=xmlDom.xml;
		
		return arrDiscntValue;
}


//*************** 3、价格计算 ********************//

// 计算房间价格
function CalPrice(sType,sValue)
{
	var decBldCjPrice,decTnCjPrice,decRoomTotal,decDiscntValue;
	var sCalStd = Form1.txtCalStd.value;	//成交总价计算方式 (1,以标准总价为基准;2,以标准单价为基准)
	var sCalMode = appForm.CalMode.value;	//计价方式 (按建筑面积；按套内面积；按套)
	
	var decBldArea=parseFloat(appForm.BldArea.value.replace(/,/g,""));		//建筑面积
	var decTnArea=parseFloat(appForm.TnArea.value.replace(/,/g,""));		//套内面积
	var decPrice=parseFloat(appForm.Price.value.replace(/,/g,""));			//建筑标准单价
	var decTnPrice=parseFloat(appForm.TnPrice.value.replace(/,/g,""));		//套内标准单价
	var decTotal=parseFloat(appForm.Total.value.replace(/,/g,""));			//标准总价
	
	//如果价格等于房间原有的价格，则初始化即可。
	if((sType=="BldCjPrice" && sValue==decPrice) || (sType=="TnCjPrice" && sValue==decTnPrice) || (sType=="RoomTotal" && sValue==decTotal) || (sType=="DiscntValue" && sValue==100))
	{
		appForm.BldCjPrice.setValue(decPrice);
		appForm.TnCjPrice.setValue(decTnPrice);
		appForm.RoomTotal.setValue(decTotal);
		appForm.DiscntValue.setValue(100);
		return;
	}
	
	switch(sType)
	{
		case "BldCjPrice":		// 修改建筑成交单价
			decBldCjPrice = Round(sValue,GetPriceZero());
			decRoomTotal = decBldCjPrice * decBldArea;
			decTnCjPrice = decRoomTotal / decTnArea;
			if(sCalStd=="1" || sCalMode=="按套")	//按套与总价模式相同
			{
				decDiscntValue=decRoomTotal / decTotal * 100;
			}
			else
			{
				switch(sCalMode)
				{
					case "按建筑面积":
						decDiscntValue=decBldCjPrice / decPrice * 100;
						break;
					case "按套内面积":
						decDiscntValue=decTnCjPrice / decTnPrice * 100;
						break;
				}
			}
			break;
		case "TnCjPrice":		// 修改套内成交单价
			decTnCjPrice = Round(sValue,GetPriceZero());
			decRoomTotal = decTnCjPrice * decTnArea;
			decBldCjPrice = decRoomTotal / decBldArea;
			if(sCalStd=="1" || sCalMode=="按套")	//按套与总价模式相同
			{
				decDiscntValue=decRoomTotal / decTotal * 100;
			}
			else
			{
				switch(sCalMode)
				{
					case "按建筑面积":
						decDiscntValue=decBldCjPrice / decPrice * 100;
						break;
					case "按套内面积":
						decDiscntValue=decTnCjPrice / decTnPrice * 100;
						break;
				}
			}
			break;
		case "RoomTotal":		// 修改房间总价
			decRoomTotal = Round(sValue,GetTotalZero());
			decBldCjPrice = decRoomTotal / decBldArea ;
			decTnCjPrice = decRoomTotal / decTnArea ;
			if(sCalStd=="1" || sCalMode=="按套")	//按套与总价模式相同
			{
				decDiscntValue=decRoomTotal / decTotal * 100;
			}
			else
			{
				switch(sCalMode)
				{
					case "按建筑面积":
						decDiscntValue=decBldCjPrice / decPrice * 100;
						break;
					case "按套内面积":
						decDiscntValue=decTnCjPrice / decTnPrice * 100;
						break;
				}
			}
			break;
		case "DiscntValue":		// 修改折扣
		case "CalMode":			// 修改计价方式
			decDiscntValue = Round(sValue,4);
			if(sCalStd=="1" || sCalMode=="按套")	//按套与总价模式相同
			{
				decRoomTotal=decTotal  * decDiscntValue / 100;
				decBldCjPrice = decRoomTotal / decBldArea;
				decTnCjPrice = decRoomTotal / decTnArea;
			}
			else
			{
				switch(sCalMode)
				{
					case "按建筑面积":
						decBldCjPrice = decPrice * decDiscntValue / 100;
						decRoomTotal = decBldCjPrice * decBldArea;
						decTnCjPrice = decRoomTotal / decTnArea;
						break;
					case "按套内面积":
						decTnCjPrice = decTnPrice * decDiscntValue / 100;
						decRoomTotal = decTnCjPrice * decTnArea;
						decBldCjPrice = decRoomTotal / decBldArea;
						break;
				}
			}
			break;
	}
	
	// 重新赋值
	event.returnValue=false;
	appForm.BldCjPrice.setValue(Round(decBldCjPrice,GetPriceZero()));
	appForm.TnCjPrice.setValue(Round(decTnCjPrice,GetPriceZero()));
	appForm.RoomTotal.setValue(Round(decRoomTotal,GetTotalZero()));
	appForm.DiscntValue.setValue(Round(decDiscntValue,2));
	
}


// 计算协议总价、定金、按揭、公积金
function CalTotal()
{
	// 人民币协议总价
	if(appForm.IsZxkbrht.value=="0")
	{
		var decRmbCjTotal = parseFloat(appForm.RoomTotal.value.replace(/,/g,"")) + parseFloat(appForm.FsTotal.value.replace(/,/g,""));
	}
	else
	{
		var decRmbCjTotal = parseFloat(appForm.RoomTotal.value.replace(/,/g,"")) + parseFloat(appForm.ZxTotal.value.replace(/,/g,"")) + parseFloat(appForm.FsTotal.value.replace(/,/g,""));
	}
	appForm.RmbCjTotal.setValue(Round(decRmbCjTotal,GetTotalZero()));
	
	// 协议总价
	var decCjTotal = decRmbCjTotal / parseFloat(appForm.ExRate.value.replace(/,/g,"")) ;
	appForm.CjTotal.setValue(Round(decCjTotal,GetTotalZero()));	
}

function GetPriceZero()
{
	if(Form1.txtPriceZero.value=="") {return 2}
	else {return parseInt(Form1.txtPriceZero.value);}
}

function GetTotalZero()
{
	if(Form1.txtTotalZero.value=="") {return 2}
	else {return parseInt(Form1.txtTotalZero.value);}
}

// 获取最终折扣数值和折扣说明
function CalFktotal()
{
	// 计算基准
	var sCalStd;
	
	if(Form1.txtCalStd.value == "1" || appForm.CalMode.value=="按套") 
	{
		sCalStd = "1";			
	}
	else
	{
		sCalStd = "2";			
	}

	// 返回结果
	var a;
	
	if (appForm.CalMode.value=="按建筑面积" || appForm.CalMode.value=="按套")
	{
		a=CalFinalDiscnt(appForm.ProjGUID.value,appForm.Price.value.replace(/,/g,""),appForm.BldArea.value.replace(/,/g,""),appForm.Total.value.replace(/,/g,""),sCalStd,Form1.txtDiscntListXml.value);
	}
	else
	{
		a=CalFinalDiscnt(appForm.ProjGUID.value,appForm.TnPrice.value.replace(/,/g,""),appForm.TnArea.value.replace(/,/g,""),appForm.Total.value.replace(/,/g,""),sCalStd,Form1.txtDiscntListXml.value);
	}
	
	return a;

}